﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BOAcademias;
using TOAcademias;
using System.IO;
using AjaxControlToolkit;
using System.Collections.Specialized;
using System.Data;

/*************************************
Autor: Carlos Sánchez
Fecha de Creación: 06/02/2011
Descripción de la Funcionalidad: Formulario que permite generar el reporte
de requerimientos por seccion, teniendo la opcion de poder filtrar
la informacion a mostrar.
**************************************/   

public partial class TunkiFiles_Reportes_ReporteRequerimientoxSeccion : System.Web.UI.Page
{
    BOAcademia boAcademia = new BOAcademia();
    BOInstructor boInstructor = new BOInstructor();
    BOSeccion boSeccion = new BOSeccion();
    BOPeriodo boPeriodo = new BOPeriodo();
    BOReporte boReporte = new BOReporte();

    protected void Page_Load(object sender, EventArgs e)
    {

    }


    //Llenar Academias
    [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
    public static AjaxControlToolkit.CascadingDropDownNameValue[] GetddlAcademia(string knownCategoryValues, string category)
    {

        BOAcademia boAcademia = new BOAcademia();
        List<CascadingDropDownNameValue> listaValues = new List<CascadingDropDownNameValue>();
        
        foreach (TOAcademia toAcademia in boAcademia.obtenerAcademias())
        {
            listaValues.Add(new CascadingDropDownNameValue(
            toAcademia.Des_Academia,
            toAcademia.Cod_Academia));
        }

        return listaValues.ToArray();

    }

    //Llenar Instructores
    [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
    public static AjaxControlToolkit.CascadingDropDownNameValue[] GetddlInstructor(string knownCategoryValues, string category)
    {

        StringDictionary kv =
        CascadingDropDown.ParseKnownCategoryValuesString(
        knownCategoryValues);

        String strCodAcademia=kv["Academia"];

        BOInstructor boInstructor = new BOInstructor();                
        
        List<CascadingDropDownNameValue> listaValues =
        new List<CascadingDropDownNameValue>();

        //foreach (TOInstructor dr in boInstructor.obtenerInstructorsxCodAcademia(CodAcademia))
        foreach (TOInstructor toInstructor in boInstructor.obtenerInstructors())
        {
            listaValues.Add(new CascadingDropDownNameValue(
            toInstructor.NombreCompleto,
            toInstructor.Codigo));
        }

        return listaValues.ToArray();

    }

    //Llenar Secciones
    [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
    public static CascadingDropDownNameValue[] GetddlSeccion(string knownCategoryValues, string category)
    {
        StringDictionary kv =
        CascadingDropDown.ParseKnownCategoryValuesString(
        knownCategoryValues);

        String strCodInstructor = kv["Instructor"];

        BOSeccion boSeccion = new BOSeccion();

        List<CascadingDropDownNameValue> listaValues =
        new List<CascadingDropDownNameValue>();

        foreach (TOSeccion toSeccion in boSeccion.obtenerSeccionesActivasxInstructor(strCodInstructor))
        {
            listaValues.Add(new CascadingDropDownNameValue(
            toSeccion.Cod_seccion,
            toSeccion.Cod_seccion));
        }

        return listaValues.ToArray();
    }



    #region Generar Reporte

    String GenerarFiltro()
    {
        String strFiltroTotal = String.Empty;
        String strFiltroAcademia = String.Empty;
        String strFiltroInstructor = String.Empty;
        String strFiltroSeccion = String.Empty;
        String filtroPeriodoActivo = String.Empty;
        String strFiltroRangoFechas = String.Empty;

        if (ddlAcademia.SelectedValue != "")
        {
            strFiltroAcademia = "{UVW_REP_REQUERIMIENTO_SECCION.COD_ACADEMIA}='" + ddlAcademia.SelectedValue + "'";
        }

        if (ddlInstructor.SelectedValue != "")
        {
            strFiltroInstructor = "{UVW_REP_REQUERIMIENTO_SECCION.COD_INSTRUCTOR}='" + ddlInstructor.SelectedValue + "'";
        }

        if (ddlSeccion.SelectedValue != "")
        {
            strFiltroSeccion = "{UVW_REP_REQUERIMIENTO_SECCION.COD_SECCION}='" + ddlSeccion.SelectedValue + "'";
        }
        
        filtroPeriodoActivo = "{UVW_REP_REQUERIMIENTO_SECCION.COD_PERIODO}='" + boPeriodo.obtenerPeriodoActivo().Codigo + "'";

        if (txtFecInicio.Text != "")
        {
            strFiltroRangoFechas = "Date({UVW_REP_REQUERIMIENTO_SECCION.FEC_CLASE})>=cdate('" + txtFecInicio.Text + "')";
        }
        if (txtFecFin.Text != "")
        {
            if (strFiltroRangoFechas != String.Empty) strFiltroRangoFechas += " AND ";
            strFiltroRangoFechas += "Date({UVW_REP_REQUERIMIENTO_SECCION.FEC_CLASE})<=cdate('" + txtFecFin.Text + "')";
        }

        if (strFiltroAcademia != "") strFiltroTotal = strFiltroAcademia;
        if (strFiltroInstructor != "")
        {
            if (strFiltroTotal != "")
                strFiltroTotal += " and " + strFiltroInstructor;
            else
                strFiltroTotal = strFiltroInstructor;
        }
        if (strFiltroSeccion != "")
        {
            if (strFiltroTotal != "")
                strFiltroTotal += " and " + strFiltroSeccion;
            else
                strFiltroTotal = strFiltroSeccion;
        }
        if (filtroPeriodoActivo != "")
        {
            if (strFiltroTotal != "")
                strFiltroTotal += " and " + filtroPeriodoActivo;
            else
                strFiltroTotal = filtroPeriodoActivo;
        }
        if (strFiltroRangoFechas != "")
        {
            if (strFiltroTotal != "")
                strFiltroTotal += " and " + strFiltroRangoFechas;
            else
                strFiltroTotal = strFiltroRangoFechas;
        }

        return strFiltroTotal;
    }

    protected void imbGenerarReporte_Click(object sender, ImageClickEventArgs e)
    {
        Session["Reporte"] = "Requerimiento";
        Session["TipoReporte"] = null;
        Session["Filtro"] = GenerarFiltro();
        Server.Transfer("VisorReporte.aspx", true);
    }

    #endregion



    protected void imbExportarExcel_Click(object sender, ImageClickEventArgs e)
    {
        gvGrid.DataSource = boReporte.reporteRequerimientoxSeccion();
        gvGrid.DataBind();
        //PrepareGridViewForExport(GridView1);
        ExportGridView(gvGrid);
    }

    private void ExportGridView(GridView gvGrid)
    {
        string strAttachment = "attachment; filename=Reporte.xls";
        Response.ClearContent();
        Response.AddHeader("content-disposition", strAttachment);
        Response.ContentType = "application/ms-excel";

        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);

        gvGrid.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
    }

    public override void VerifyRenderingInServerForm(Control control)
    {
    }

    private void PrepareGridViewForExport(Control ctlGv)
    {
        LinkButton lbn = new LinkButton();
        Literal l = new Literal();
        string strName = String.Empty;

        for (int i = 0; i < ctlGv.Controls.Count; i++)
        {
            if (ctlGv.Controls[i].GetType() == typeof(LinkButton))
            {
                l.Text = (ctlGv.Controls[i] as LinkButton).Text;
                ctlGv.Controls.Remove(ctlGv.Controls[i]);
                ctlGv.Controls.AddAt(i, l);
            }
            else if (ctlGv.Controls[i].GetType() == typeof(DropDownList))
            {
                l.Text = (ctlGv.Controls[i] as DropDownList).SelectedItem.Text;
                ctlGv.Controls.Remove(ctlGv.Controls[i]);
                ctlGv.Controls.AddAt(i, l);
            }
            else if (ctlGv.Controls[i].GetType() == typeof(CheckBox))
            {
                l.Text = (ctlGv.Controls[i] as CheckBox).Checked ? "True" : "False";
                ctlGv.Controls.Remove(ctlGv.Controls[i]);
                ctlGv.Controls.AddAt(i, l);
            }
            if (ctlGv.Controls[i].HasControls())
            {
                PrepareGridViewForExport(ctlGv.Controls[i]);
            }
        }
    }



}
